﻿//https://www.nowcoder.com/questionTerminal/2d3f6ddd82da445d804c95db22dcc471
#include <iostream>
using namespace std;
const int N = 1e5 + 10;
int n;
int arr[N];
int main()
{
    cin >> n;
    for (int i = 0; i < n; i++) cin >> arr[i];
    int ret = 0, i = 0;
    while (i < n)
    {
        if (i == n - 1)
        {
            ret++;
            break;
        }
        if (arr[i] < arr[i + 1])
        {
            while (i + 1 < n && arr[i] <= arr[i + 1]) i++;
            ret++;
        }
        else if (arr[i] > arr[i + 1])
        {
            while (i + 1 < n && arr[i] >= arr[i + 1]) i++;
            ret++;
        }
        else
        {
            while (i + 1 < n && arr[i] == arr[i + 1]) i++;
        }
        i++;
    }
    cout << ret << endl;
    return 0;
}

//https://ac.nowcoder.com/acm/problem/219038

//算法思路：
//贪⼼ + 数学。
//a.尽可能的翻倍；
//b.不能⽆脑翻倍，只能是 2 * cur 的倍数时，才能翻倍。
//C++ 算法代码：
#include <iostream>
using namespace std;
int t, h;
int fun()
{
    int ret = 0, a = 1;
        while (h)
        {
            h -= a;
            ret++;
            if (h % (a * 2) == 0)
            {
                a *= 2;
            }
        }
    return ret;
}
int main()
{
    cin >> t;
    while (t--)
    {
        cin >> h;
        cout << fun() << endl;
    }

    return 0;
}

#include <iostream>
#include <vector>
using namespace std;

int _count(int x) {
    int n = 1;
    int count = 1;
    x = x - 1;
    while (x) {
        if (x % (2 * n) == 0) n = n * 2;
        x -= n;
        count++;
    }
    return count;
}
int main() {
    int T;
    cin >> T;
    vector<int> H(T, 0);
    for (int i = 0; i < T; i++) cin >> H[i];
    for (int i = 0; i < T; i++) cout << _count(H[i]) << endl;
    return 0;
}

//https://www.nowcoder.com/practice/4af96fa010c44638a7e112abf65f7237?tpId=196&tqId=39285&ru=/exam/oj

//算法思路：
//我们在考虑最⻓递增⼦序列的⻓度的时候，其实并不关⼼这个序列⻓什么样⼦，我们只是关⼼最后
//⼀个元素是谁。这样新来⼀个元素之后，我们就可以判断是否可以拼接到它的后⾯。
//因此，我们可以创建⼀个数组，统计⻓度为 x 的递增⼦序列中，最后⼀个元素是谁。为了尽可能
//的让这个序列更⻓，我们仅需统计⻓度为 x 的所有递增序列中最后⼀个元素的「最⼩值」。
//统计的过程中发现，数组中的数呈现「递增」趋势，因此可以使⽤「⼆分」来查找插⼊位置。

class Solution
{
    int dp[100010] = { 0 }; // dp[i] 表⽰：⻓度为 i 的最⼩末尾
    int pos = 0;
public:
    int LIS(vector<int>& a)
    {
        for (auto x : a)
        {
            // 查找 x 应该放在哪个位置
            if (pos == 0 || x > dp[pos])
            {
                dp[++pos] = x;
            }
            else
            {
                // ⼆分查找插⼊位置
                int l = 1, r = pos;
                while (l < r)
                {
                    int mid = (l + r) / 2;
                    if (dp[mid] >= x) r = mid;
                    else l = mid + 1;
                }
                dp[l] = x;
            }
        }
        return pos;
    }
};
